const http = require('http')
const fs = require('fs')
const path = require('path')
const url = require('url')
const quertString = require('querystring')

const mime = require('mime')
const template = require('art-template')
const moment = require('moment')

// 创建服务器对象
const server = http.createServer();

// 监听服务器请求
server.on('request', (req, res) => {
  // 首页路由
  if (req.url.startsWith('/index') || req.url == '/') {
    // 读取data.json的数据
    fs.readFile(path.join(__dirname, 'data/data.json'), (err, data) => {
      if (err) {
        return console.log(err);
      }
      // 将json字符串转为json对象
      data = JSON.parse(data);
      // 模版和对象拼接
      let str = template(path.join(__dirname, 'pages/index.html'), data);
      // 拼接好的结果返回给页面
      res.end(str);
    })
  } else if (req.url.startsWith('/add')) {
    // 添加页面路由
    getPages('pages/add.html', res)
  } else if (req.url.startsWith('/assets')) {
    // 其他资源读取，设置文件类型
    res.setHeader('content-type', mime.getType(req.url));
    getPages(req.url, res)
  } else if (req.url.startsWith('/delete')) {
    // 删除留言
    // 获取url的查询字符串的ID，根据id去data中删除对应数据
    let id = url.parse(req.url, true).query.id;
    fs.readFile(path.join(__dirname, 'data/data.json'), 'utf8', (err, data) => {
      if (err) {
        return console.log(err);
      }
      // 获取到list数组
      data = JSON.parse(data);
      data.list.splice(data.list.findIndex(v => v.id === id), 1);

      fs.writeFile(path.join(__dirname, 'data/data.json'), JSON.stringify(data), (err, data) => {
        if (err) {
          return console.log(err);
        }
        res.statusCode = 302;
        res.setHeader('location', '/index')
        // res.writeHead(302, {
        //   Location: '/index'
        // })
        res.end()
      })

    })
  } else if (req.url.startsWith('/submit') && req.method === 'GET') {
    // 获取查询字符串数据
    let info = url.parse(req.url, true).query;
    info.id = Date.now();
    info.created = moment().format('YYYY年MM月DD日 HH:mm:ss');
    console.log(info);
    // 将数据添加到data.json中
    fs.readFile(path.join(__dirname, 'data/data.json'), 'utf8', (err, data) => {
      if (err) {
        return console.log(err);
      }
      data = JSON.parse(data);
      data.list.push(info);
      data = JSON.stringify(data);
      fs.writeFile(path.join(__dirname, 'data/data.json'), data, (err, data) => {
        if (err) {
          return console.log(err);
        }
        res.statusCode = 302;
        res.setHeader('location', '/index');
        res.end();
      })
    })
  } else if (req.url.startsWith('/submit') && req.method === 'POST') {
    // 获取查询字符串
    let str = '';
    req.on('data', (params) => {
      str += params;
    })
    req.on('end', function () {
      let info = quertString.parse(str);
      info.id = Date.now();
      info.created = moment().format('YYYY年MM月DD日 HH:mm:ss');
      // 将数据添加到data.json中
      fs.readFile(path.join(__dirname, 'data/data.json'), 'utf8', (err, data) => {
        if (err) {
          return console.log(err);
        }
        data = JSON.parse(data);
        data.list.push(info);
        data = JSON.stringify(data);
        fs.writeFile(path.join(__dirname, 'data/data.json'), data, (err, data) => {
          if (err) {
            return console.log(err);
          }
          // res.statusCode = 302;
          // res.setHeader('location', '/index');
          // res.end();
          res.writeHead(302, {
            location: '/index'
          }).end();
        })
      })
    })
  } else {
    res.writeHead(404, {
      'content-type': 'text/html; charset=utf8'
    })
    res.end('<h2>亲，您访问的页面不存在哦</h2>')
  }
})

server.listen(9999, () => console.log('http://localhost:9999', '服务器启动成功'))

function getPages(addr, res) {
  fs.readFile(path.join(__dirname, addr), (err, data) => {
    if (err) {
      return console.log(err);
    }
    res.end(data)
  })
}